home *** CD-ROM | disk | FTP | other *** search
/ TPUG - Toronto PET Users Group / TPUG Users Group CD / TPUG Users Group CD.iso / CRS / crs36.d81 / vdcram15.sda / VDC RDEXT2.S (.txt) < prev   
Commodore BASIC  |  2009-10-10  |  17KB  |  700 lines

  1. 100 SYS700
  2. 101 .OPT P
  3. 102 *=$B8B0
  4. 103 ENDCHR = $08:COUNT = $0B
  5. 104 VALTYP = $0D:GARBFL = $0F
  6. 105 INDEX = $22:FORPNT = $49
  7. 106 JMPER = $54:FACHO = $62
  8. 107 FBUFPT = $71:CHRGET = $73
  9. 108 CHR(null)T = $79:TXTPTR = $7A
  10. 109 LDTB1 = $D9:ZP = $FB
  11. 110 BUF = $200:VECSAV = $2A7
  12. 111 ICRNCH = $304:ERROR = $A437
  13. 112 LINKPG = $A533:CRNCH = $A57C
  14. 113 PLOOP = $A6F3:PRIT4 = $A6EF
  15. 114 QPLOP = $A71A:NEWSTT = $A7AE
  16. 115 (null)NE = $A7E4:OUTDO = $AB47
  17. 116 CHKNUM = $AD8D:FRMEVL = $AD9E
  18. 117 EVAL = $AE86:PARCHK = $AEF1
  19. 118 CHKCOM = $AEFD:FRESTR = $B6A3
  20. 119 GETNUM = $B7EB:GETADR = $B7F7
  21. 120 FLOATC = $BC49:OUTINT = $BDCD
  22. 121 NEWTOK = $CC:DATTOK = $49
  23. 122 REMTOK = $55:FUNTOK = $D0
  24. 123 ;
  25. 124 ;RAM DISK FILENAME BUFFER
  26. 125 ;
  27. 126 FILNAME = *
  28. 127 .ASC "@@@@@@@@@@@@@@@@"
  29. 128 FNSIZE = *-FILNAME
  30. 129 ;
  31. 130 ;RAM DISK DIRECTORY
  32. 131 ;
  33. 132 DIRBUFF = *
  34. 133 .ASC "@@@@@@@@@@@@@@@@"
  35. 134 .ASC "@@@@@@@@@@@@@@@@"
  36. 135 .ASC "@@@@@@@@@@@@@@@@"
  37. 136 .ASC "@@@@@@@@@@@@@@@@"
  38. 137 .ASC "@@@@@@@@@@@@@@@@"
  39. 138 .ASC "@@@@@@@@@@@@@@@@"
  40. 139 .ASC "@@@@@@@@@@@@@@@@"
  41. 140 .ASC "@@@@@@@@@@@@@@@@"
  42. 141 .ASC "@@@@@@@@@@@@@@@@"
  43. 142 .ASC "@@@@@@@@@@@@@@@@"
  44. 143 .ASC "@@@@@@@@@@@@@@@@"
  45. 144 .ASC "@@@@@@@@@@@@@@@@"
  46. 145 .ASC "@@@@@@@@@@@@@@@@"
  47. 146 .ASC "@@@@@@@@@@@@@@@@"
  48. 147 .ASC "@@@@@@@@@@@@@@@@"
  49. 148 BUMAX = *-DIRBUFF
  50. 149 ;
  51. 150 ;MAX NUMBER OF DIR ENTRIES
  52. 151 ;
  53. 152 FNMAX = 15
  54. 153 ;
  55. 154 ;RAM DISK FILE ENTRIES
  56. 155 ;CORRESPOND 1 TO 1 WITH
  57. 156 ;FILENAMES, FIRST 2 BYTES
  58. 157 ;EQUALS FILE LENGTH, NEXT
  59. 158 ;2 BYTES EQUAL STARTING
  60. 159 ;POSITION IN 64 RAM, NEXT
  61. 160 ;2 BYTES EQUAL STARTING
  62. 161 ;POSITION IN VDC RAM
  63. 162 ;THIS IS THE SAME FOR ALL
  64. 163 ;15 RAMDISK FILE ENTRIES
  65. 164 ;
  66. 165 DIRBYT = *
  67. 166 .BYTE 0,0,0,0,0,0
  68. 167 MAX =*-DIRBYT
  69. 168 .BYTE 0,0,0,0,0,0
  70. 169 .BYTE 0,0,0,0,0,0
  71. 170 .BYTE 0,0,0,0,0,0
  72. 171 .BYTE 0,0,0,0,0,0
  73. 172 .BYTE 0,0,0,0,0,0
  74. 173 .BYTE 0,0,0,0,0,0
  75. 174 .BYTE 0,0,0,0,0,0
  76. 175 .BYTE 0,0,0,0,0,0
  77. 176 .BYTE 0,0,0,0,0,0
  78. 177 .BYTE 0,0,0,0,0,0
  79. 178 .BYTE 0,0,0,0,0,0
  80. 179 .BYTE 0,0,0,0,0,0
  81. 180 .BYTE 0,0,0,0,0,0
  82. 181 .BYTE 0,0,0,0,0,0
  83. 182 BYMAX = *-DIRBYT
  84. 183 ;
  85. 184 ;NEXT AVAILABLE POSITION
  86. 185 ;IN RAM DISK
  87. 186 ;
  88. 187 NDBYTE .BYTE 0,0
  89. 188 ;
  90. 189 ;MISC. POINTERS AND FLAGS
  91. 190 ;
  92. 191 FLAG16 .BYTE 0
  93. 192 MEMMAX .BYTE 0,0
  94. 193 ENDP .BYTE 0,0
  95. 194 RESULT .BYTE 0,0,0
  96. 195 RMSRT .BYTE 0,0
  97. 196 TEMP .BYTE 0
  98. 197 FLENN .BYTE 0
  99. 198 DIRPOS .BYTE 0
  100. 199 ;
  101. 200 ;ADDRESS OF BLOCK TO MOVE
  102. 201 ;
  103. 202 BLOCK1 .BYTE 0,0
  104. 203 ;
  105. 204 ;ADDRESS OF BLOCK TO MOVE TO
  106. 205 ;
  107. 206 BLOCK2 .BYTE 0,0
  108. 207 ;
  109. 208 ;NUMBER OF BYTES TO MOVE
  110. 209 ;
  111. 210 NUMBER .BYTE 0,0
  112. 211 ;
  113. 212 ;COUNT FOR REMAINING BYTES TO MOVE
  114. 213 ;
  115. 214 COUNTER .BYTE 0,0
  116. 215 ;
  117. 216 ;ERROR MESSAGE ROUTINE
  118. 217 ;
  119. 218 LONERR LDA #$00:.BYTE $2C
  120. 219 FULERR LDA #$01:.BYTE $2C
  121. 220 EXTERR LDA #$02:.BYTE $2C
  122. 221 FNFERR LDA #$03
  123. 222 ERRROU ASL:TAX:LDA ERRVEC,X
  124. 223 :      STA INDEX:LDA ERRVEC+1,X
  125. 224 :      STA INDEX+1:JMP DOEROR
  126. 225 ERRVEC .WORD TLONG
  127. 226 :      .WORD FULLMESS
  128. 227 :      .WORD FALREAD
  129. 228 :      .WORD FNFMESS
  130. 229 ;
  131. 230 ;RAM DISK CATALOG MESSAGES
  132. 231 ;
  133. 232 .ASC "64 MODE VDC RAM DISK"
  134. 233 .ASC " FROM "
  135. 234 .ASC "DBSOFT"
  136. 235 DIRTI =*
  137. 236 .ASC "   FILENAME [146]      START [146]"
  138. 237 .ASC "    LENGTH [146]":.BYTE 13
  139. 238 .ASC "---------------------------"
  140. 239 .ASC "-------------":.BYTE 0
  141. 240 DIREMP =*
  142. 241 .ASC "NO FILES IN RAM DISK"
  143. 242 .BYTE 0
  144. 243 VDCFRE =*
  145. 244 .ASC "  BYTES FREE [146]":.BYTE 13,0
  146. 245 ;
  147. 246 ;CHECK AMOUNT OF MEMORY THEN
  148. 247 ;ADJUST TOP OF RAMDISK MEMORY
  149. 248 ;
  150. 249 CHKMEM LDA #<65535:STA VDCLOBYT
  151. 250 :      LDA #>65535:STA VDCHIBYT
  152. 251 :      LDA #219:STA VDCDATA
  153. 252 :      JSR POKE1:LDA #<32767
  154. 253 :      STA VDCLOBYT:LDA #>32767
  155. 254 :      STA VDCHIBYT:JSR PEEK1
  156. 255 :      CMP #219:BEQ ONLY16
  157. 256 (null)OD64 LDA #255:STA MEMMAX+1
  158. 257 :      STA MEMMAX:JSR REG28S
  159. 258 :      LDA 54785:CMP #255
  160. 259 :      BEQ CMEXIT:JSR REG28S
  161. 260 :      LDA #63:STA 54785:RTS
  162. 261 ONLY16 LDA #64:STA MEMMAX+1
  163. 262 :      LDA #1:STA FLAG16
  164. 263 CMEXIT RTS
  165. 264 REG28S LDA #28:STA 54784:JSR WAIT1
  166. 265 :      RTS
  167. 300 ;
  168. 301 ;FIND FILENAME IN DIRECTORY
  169. 302 ;THAT IS CONTAINED IN THE
  170. 303 ;BUFFER CALLED FILNAME
  171. 304 ;IF PRESENT .A WILL HOLD
  172. 305 ;DIRECTORY ENTRY NUMBER
  173. 306 ;ELSE .A WILL HOLD 255
  174. 307 ;
  175. 308 FNENT LDA #0:STA DIRPOS
  176. 309 :     LDA #<FILNAME:STA ZP
  177. 310 :     LDA #>FILNAME:STA ZP+1:LDX #0
  178. 311 FINDLP LDY #0
  179. 312 INFLP LDA (ZP),Y:CMP DIRBUFF,X
  180. 313 :     BNE INCXC:INY:INX:CPY FLENN
  181. 314 :     BNE INFLP:JMP MATCH
  182. 315 INCXC INC DIRPOS:LDY DIRPOS:LDA #0
  183. 316 ADDLP CLC:ADC #FNSIZE:TAX:DEY
  184. 317 :     BNE ADDLP:LDA DIRPOS
  185. 318 :     CMP #FNMAX:BCC FINDLP
  186. 319 :     LDA #255:STA DIRPOS:RTS
  187. 320 MATCH LDA DIRPOS:RTS
  188. 321 SETFNM LDY #FNSIZE-1:LDA #"@"
  189. 322 FILP STA FILNAME,Y:DEY:BNE FILP
  190. 323 ;
  191. 324 ;EVALUATE EXPRESSION,
  192. 325 ;GET STRING INFORMATION,
  193. 326 ;PREPARE 0 PAGE POINTER
  194. 327 ;
  195. 328 :    JSR SETML1:STX ZP:STY ZP+1
  196. 329 :    STA FLENN:CMP #FNSIZE
  197. 330 :    BCC GCOPY:LDA #FNSIZE-1
  198. 331 :    STA FLENN
  199. 332 ;
  200. 333 ;COPY FILENAME TO BUFFER
  201. 334 ;
  202. 335 GCOPY LDY FLENN
  203. 336 CPYLP LDA (ZP),Y:STA FILNAME,Y:DEY
  204. 337 :     BPL CPYLP:RTS
  205. 338 ;
  206. 339 ;THE JOB OF THIS ROUTINE
  207. 340 ;IS TO FIND THE NEXT
  208. 341 ;BLANK DIRECTORY ENTRY
  209. 342 ;
  210. 343 FINBLENT LDA #0:STA TEMP:LDX #0
  211. 344 FBLLP LDA DIRBUFF,X
  212. 345 ;
  213. 346 ;CMP "@" IF = ENTRY BLANK
  214. 347 ;
  215. 348 :     CMP #"@":BEQ BLANK:INC TEMP
  216. 349 :     LDY TEMP:LDA #0
  217. 350 ALLP CLC:ADC #FNSIZE:DEY:BNE ALLP
  218. 351 :     TAX:CPX #BUMAX:BCC FBLLP
  219. 352 :     LDA #255:RTS
  220. 353 ;
  221. 354 ;LDA DIRECTORY ENTRY POS
  222. 355 ;AND RETURN
  223. 356 ;
  224. 357 BLANK LDA TEMP:RTS
  225. 358 ;
  226. 359 ;FILL DIRECTORY ENTRIES
  227. 360 ;Y=0 DON'T ENTER LOOP
  228. 361 ;
  229. 362 PUTNAM LDA #0:LDY TEMP:CPY #0
  230. 363 :      BEQ STPUT
  231. 364 ;
  232. 365 ;SET Y=TO CORRECT DIRBYT OFFSET
  233. 366 ;
  234. 367 PUTALP CLC:ADC #MAX:DEY:BNE PUTALP
  235. 368 ;
  236. 369 ;STORE FILE PARAMETERS
  237. 370 ;
  238. 371 STPUT TAY:LDA PLEN:STA DIRBYT,Y:INY
  239. 372 :     LDA PLEN+1:STA DIRBYT,Y:INY
  240. 373 :     LDA START:STA DIRBYT,Y:INY
  241. 374 :     LDA START+1:STA DIRBYT,Y:INY
  242. 375 :     LDA RMSRT:STA DIRBYT,Y:INY
  243. 376 :     LDA RMSRT+1:STA DIRBYT,Y
  244. 377 :     LDA #0:LDY TEMP:CPY #0
  245. 378 :     BEQ STFPT
  246. 379 ;
  247. 380 ;SET Y=TO CORRECT DIRBUFF OFFSET
  248. 381 ;
  249. 382 PFLP CLC:ADC #FNSIZE:DEY:BNE PFLP
  250. 383 STFPT LDX #0:TAY
  251. 384 ;
  252. 385 ;ACTUAL TRANSFER OF
  253. 386 ;FILENAME OCCURS HERE
  254. 387 ;
  255. 388 STFPLP LDA FILNAME,X:STA DIRBUFF,Y
  256. 389 :      INY:INX:CPX FLENN:BCC STFPLP
  257. 390 :      RTS
  258. 391 ;
  259. 392 ;CHECK PROGRAM LENGTH, IS HT
  260. 393 ;LESS THAN AVAILABLE VDC MEMORY
  261. 394 ;
  262. 395 CHFILEN SEC:LDA ENDP:SBC START
  263. 396 :       STA PLEN:LDA ENDP+1
  264. 397 :       SBC START+1:STA PLEN+1
  265. 398 :       LDA #0:SBC #0:STA RESULT+2
  266. 399 :       LDA FLAG16:CMP #1
  267. 400 :       BEQ MAXME0:LDA RESULT+2
  268. 401 :       CMP #0:BNE TOOLONG
  269. 402 :       JMP CHFILN1
  270. 403 ;
  271. 404 ;FILE TOO LONG PRINT ERROR MESSAGE
  272. 405 ;
  273. 406 MAXME0 LDA PLEN+1:CMP MEMMAX+1
  274. 407 :      BCS TOOLONG
  275. 408 ;
  276. 409 ;SET END OF PRG POINTER
  277. 410 ;
  278. 411 CHFILN1 CLC:LDA PLEN:ADC NDBYTE
  279. 412 :       STA RESULT:LDA PLEN+1
  280. 413 :       ADC NDBYTE+1:STA RESULT+1
  281. 414 :       LDA #0:ADC #0:STA RESULT+2
  282. 415 :       LDA FLAG16:CMP #1
  283. 416 :       BEQ MAXME1:LDA RESULT+2
  284. 417 :       CMP #0:BNE TOOLONG
  285. 418 :       JMP CHFILN2
  286. 419 ;
  287. 420 ;CHECK TO MAKE SURE FILE FITS
  288. 421 ;INTO AVAILABLE VDC MEMORY
  289. 422 ;
  290. 423 MAXME1 LDA RESULT+1:CMP MEMMAX+1
  291. 424 :      BCS TOOLONG
  292. 425 CHFILN2 LDA #0:RTS
  293. 426 TOOLONG LDA #255:RTS
  294. 427 SETRMP LDY #0:LDA (122),Y:CMP #","
  295. 428 :      BNE ITSBASIC
  296. 429 :      JMP ITSML
  297. 430 ITSBASIC LDA 43:STA START
  298. 431 :        STA BLOCK1:LDA 45:STA ENDP
  299. 432 :        LDA 44:STA START+1
  300. 433 :        STA BLOCK1+1:LDA 46
  301. 434 :        STA ENDP +1:LDA 45
  302. 435 ;
  303. 436 ;SET UP PROPER VALUES FOR
  304. 437 ;MDINIT ROUTINE, STORE
  305. 438 ;NUMBER OF BYTES TO MOVE
  306. 439 ;
  307. 440 :        SEC:LDA 45:SBC 43
  308. 441 :        STA NUMBER:LDA 46:SBC 44
  309. 442 :        STA NUMBER+1
  310. 443 ;
  311. 444 ;SET START BLOCK
  312. 445 ;
  313. 446 SETBL LDA NDBYTE:STA BLOCK2
  314. 447 :     STA RMSRT:LDA NDBYTE+1
  315. 448 :     STA BLOCK2+1:STA RMSRT+1:RTS
  316. 449 ;
  317. 450 ;SAME AS ABOVE EXCEPT M/L
  318. 451 ;
  319. 452 ITSML JSR SETML2:STY START
  320. 453 :     STY BLOCK1:STA START+1
  321. 454 :     STA BLOCK1+1:JSR SETML2
  322. 455 :     STY ENDP:STA ENDP+1:LDA ENDP
  323. 456 :     SEC:SBC START:STA NUMBER
  324. 457 :     LDA ENDP+1:SBC START+1
  325. 458 :     STA NUMBER+1:JMP SETBL
  326. 459 SETUP JSR (null)FAST:JSR SETFNM
  327. 460 :     JSR FNENT:RTS
  328. 461 ;
  329. 462 ;BLANK SCREEN AND GOTO
  330. 463 ;FAST MODE, SET FILENAME,
  331. 464 ;CHECK FOR DUP NAME IF +
  332. 465 ;IT ALREADY EXISTS, SET
  333. 466 ;PARAMS FOR MOVE, CHECK
  334. 467 ;LENGTH OF PRG IF - IT'S
  335. 468 ;TOO LONG TO FIT IN RAMDISK
  336. 469 ;
  337. 470 RSAV JSR SETUP:BPL ALREADY
  338. 471 :    JSR SETRMP:JSR CHFILEN
  339. 472 :    BPL NXSUB:JSR RLEXIT
  340. 473 :    JMP LONERR
  341. 474 ;
  342. 475 ;FIND NEXT BLANK DIR ENTRY
  343. 476 ;IF- DIR FULL PRINT ERR MSG
  344. 477 ;
  345. 478 NXSUB JSR FINBLENT:BPL GEXIT
  346. 479 :     JSR RLEXIT:JMP FULERR
  347. 480 ;
  348. 481 ;PUT NAME IN DIR, PREPARE
  349. 482 ;FOR MOVE, DO IT
  350. 483 ;
  351. 484 GEXIT JSR PUTNAM:JSR MDINIT
  352. 485 :     JSR MOVEUP:CLC:LDA RESULT
  353. 486 ;
  354. 487 ;STORE NEXT POS. LO IN RAM DISK
  355. 488 ;
  356. 489 :     ADC #1:STA NDBYTE
  357. 490 ;
  358. 491 ;STORE NEXT POS. HI IN RAM DISK
  359. 492 ;
  360. 493 :     LDA RESULT+1:ADC #0
  361. 494 :     STA NDBYTE+1:JSR FRERAM
  362. 495 :     JMP RLEXIT
  363. 496 FRERAM SEC:LDA MEMMAX:LDX MEMMAX+1
  364. 497 :      SBC NDBYTE:TAY:TXA
  365. 498 :      SBC NDBYTE+1:TAX:TYA
  366. 499 :      STA MEMFRE:STX MEMFRE+1:RTS
  367. 500 ;
  368. 501 ;ALL DONE RETURN TO BASIC
  369. 502 ;
  370. 503 RLEXIT JSR (null)SLOW:RTS
  371. 504 ALREADY JSR RLEXIT:JMP EXTERR
  372. 505 ;
  373. 506 ;SET PARAMS TO LOAD FROM
  374. 507 ;RAM DISK
  375. 508 ;
  376. 509 SETPLD LDY DIRPOS:CPY #0:BEQ SETP
  377. 510 :      LDA #0
  378. 511 PADDLP CLC:ADC #MAX:DEY:BNE PADDLP
  379. 512 SETP TAY:LDA DIRBYT,Y:STA NUMBER
  380. 513 :    INY:LDA DIRBYT,Y:STA NUMBER+1
  381. 514 :    INY:LDA DIRBYT,Y:STA BLOCK2
  382. 515 :    INY:LDA DIRBYT,Y:STA BLOCK2+1
  383. 516 :    INY:LDA DIRBYT,Y:STA BLOCK1
  384. 517 :    INY:LDA DIRBYT,Y:STA BLOCK1+1
  385. 518 :    RTS
  386. 519 ;
  387. 520 ;SET UP PARAMS, DO MOVE
  388. 521 ;
  389. 522 DORAMLD JSR MDINIT:JSR MOVEDN:RTS
  390. 523 ;
  391. 524 ;BLANK SCREEN AND GOTO
  392. 525 ;FAST MODE, SET FILENAME,
  393. 526 ;CHECK TO SEE IF EXISTS
  394. 527 ;IF + IT DOES, IF NOT
  395. 528 ;PRINT ERROR MESSAGE,
  396. 529 ;SET PARAMS FOR MDINIT,
  397. 530 ;DO LOAD, CHECK TO SEE
  398. 531 ;IF BASIC, IF NOT EXIT
  399. 532 ;ELSE SET END PROGRAM,
  400. 533 ;RELINK LINES,GOTO SLOW
  401. 534 ;MODE AND RETURN
  402. 535 ;
  403. 536 RLOA JSR SETUP:BPL NXROOT:JMP FNFND
  404. 537 NXROOT JSR SETPLD:JSR DORAMLD
  405. 538 :      LDA BLOCK2+1:CMP 46
  406. 539 :      BNE RLOEXT:LDA ZP+2:STA 45
  407. 540 :      STA 47:STA 49:LDA ZP+3
  408. 541 :      STA 46:STA 48:STA 50
  409. 542 :      JSR RELINK
  410. 543 RLOEXT JSR (null)SLOW:RTS
  411. 544 FNFND  JSR RLOEXT:JMP FNFERR
  412. 545 MDINIT LDA BLOCK1:STA ZP
  413. 546 :      LDA BLOCK1+1:STA ZP+1
  414. 547 :      LDA BLOCK2:STA ZP+2
  415. 548 :      LDA BLOCK2+1:STA ZP+3
  416. 549 :      LDX NUMBER:LDY NUMBER+1:RTS
  417. 550 MOVEDN JSR SCOUNT1
  418. 551 DOWNLP JSR GETVDC:STA (ZP+2),Y
  419. 552 :      JSR ADDONE:DEC COUNTER
  420. 553 :      BNE DOWNLP:DEC COUNTER+1
  421. 554 :      LDA COUNTER+1:CMP #255
  422. 555 :      BNE DOWNLP:RTS
  423. 556 MOVEUP JSR SCOUNT1
  424. 557 MOUPLP LDA (ZP),Y:JSR PUTVDC
  425. 558 :      JSR ADDONE:DEC COUNTER
  426. 559 :      BNE MOUPLP:DEC COUNTER+1
  427. 560 :      LDA COUNTER+1:CMP #255
  428. 561 :      BNE MOUPLP:RTS
  429. 562 ADDONE INC ZP:BNE INCTAR:INC ZP+1
  430. 563 INCTAR INC ZP+2:BNE ADEXIT:INC ZP+3
  431. 564 ADEXIT RTS
  432. 565 SCOUNT1 STX COUNTER:STY COUNTER+1
  433. 566 :       LDY #0:RTS
  434. 567 ;
  435. 568 ;BLANK SCREEN AND GOTO FAST MODE
  436. 569 ;
  437. 570 (null)FAST LDA 53265:AND #239:LDX #1
  438. 571 :      JMP SETMODE
  439. 572 ;
  440. 573 ;FIX SCREEN AND GOTO SLOW MODE
  441. 574 ;
  442. 575 (null)SLOW LDA 53265:ORA #16:LDX #0
  443. 576 SETMODE STA 53265:STX 53296:RTS
  444. 577 ;
  445. 578 ;ROUTINES TO READ & WRITE
  446. 579 ;TO VDC MEMORY
  447. 580 ;
  448. 581 GETVDC LDA ZP:STA VDCLOBYT:LDA ZP+1
  449. 582 :      STA VDCHIBYT:JSR PEEK1
  450. 583 :      LDA VDCDATA:RTS
  451. 584 PUTVDC STA VDCDATA:LDA ZP+2
  452. 585 :      STA VDCLOBYT:LDA ZP+3
  453. 586 :      STA VDCHIBYT:JSR POKE1
  454. 587 :      RTS
  455. 588 ;
  456. 589 ;STORE DATA TO VDC MEMORY
  457. 590 ;
  458. 591 POKE1 JSR PEEK2:JSR SETLO
  459. 592 :     LDA VDCDATA:STA 54785:RTS
  460. 593 ;
  461. 594 ;READ DATA FROM VDC MEMORY
  462. 595 ;
  463. 596 PEEK1 JSR PEEK2:JSR WAIT1:JSR SETLO
  464. 597 :     LDA 54785:STA VDCDATA:RTS
  465. 598 ;
  466. 599 ;MISC. VDC ROUTINES
  467. 600 ;
  468. 601 SETLO LDA VDCLOBYT:STA 54785
  469. 602 :     LDA #31:STA 54784
  470. 603 WAIT1 LDA 54784:AND #128:BEQ WAIT1
  471. 604 :     RTS
  472. 605 PEEK2 LDA #18:STA 54784:JSR WAIT1
  473. 606 :     LDA VDCHIBYT:STA 54785
  474. 607 :     LDA #19:STA 54784:RTS
  475. 608 ;
  476. 609 ;INITIALIZE THE RAM DISK
  477. 610 ;
  478. 611 RDCLEAR LDX #0:LDA #"@"
  479. 612 RC1 STA DIRBUFF,X:INX:CPX #BUMAX-1
  480. 613 :   BEQ RDBYTE:JMP RC1
  481. 614 RDBYTE  LDX #BYMAX+1:LDA #0
  482. 615 RC2 STA DIRBYT,X:DEX:BPL RC2
  483. 616 :   JSR FRERAM:RTS
  484. 617 ;
  485. 618 ;ROUTINE TO DISPLAY CATALOG
  486. 619 ;
  487. 620 DIRGET LDA #0:STA TEMPDA
  488. 621 :      STA TEMPDA+1:LDA #<DIRTI
  489. 622 :      LDY #>DIRTI:JSR PRTROU
  490. 623 :      JSR CARRET:JSR FINBLENT
  491. 624 :      CMP #0:BEQ RDEMP:CMP #255
  492. 625 :      BNE TEMDIR:LDA #FNMAX
  493. 626 TEMDIR STA TEMP
  494. 627 DIRLP1 DEC TEMP:JSR FILFNA
  495. 628 :      JSR PRTNAM:LDA #<FILNAME
  496. 629 :      LDY #>FILNAME:JSR PRTROU
  497. 630 :      LDA #19:STA 211:LDX START
  498. 631 :      LDA START+1:JSR PRTINT
  499. 632 :      LDA #30:STA 211:JSR AOTPLE
  500. 633 :      LDX PLEN:LDA PLEN+1
  501. 634 :      JSR PRTINT:LDA TEMP:CMP #0
  502. 635 :      BEQ DIRFRE:JSR CARRET
  503. 636 :      JMP DIRLP1
  504. 637 DIRFRE JSR CARRET:JSR FRERAM
  505. 638 :      LDX MEMFRE:LDA MEMFRE+1
  506. 639 :      JSR PRTINT:LDA #<VDCFRE
  507. 640 :      LDY #>VDCFRE:JSR PRTROU:RTS
  508. 641 RDEMP LDA #<DIREMP:LDY #>DIREMP
  509. 642 :     JSR PRTROU:JMP DIRFRE
  510. 643 CARRET LDA #13:JSR 65490:RTS
  511. 644 PRTNAM LDA #0:LDY TEMP:CPY #0
  512. 645 :      BEQ PARGET
  513. 646 PRTALP CLC:ADC #MAX:DEY:BNE PRTALP
  514. 647 PARGET TAY:LDA DIRBYT,Y:STA PLEN
  515. 648 :      INY:LDA DIRBYT,Y:STA PLEN+1
  516. 649 :      INY:LDA DIRBYT,Y:STA START
  517. 650 :      INY:LDA DIRBYT,Y:STA START+1
  518. 651 :      LDA #0:LDY TEMP:CPY #0
  519. 652 :      BEQ NAZERO
  520. 653 NAMADJ CLC:ADC #FNSIZE:DEY
  521. 654 :      BNE NAMADJ
  522. 655 NAZERO LDX #0:TAY
  523. 656 NAMGET LDA DIRBUFF,Y:CMP #"@"
  524. 657 :      BEQ NADONE:STA FILNAME,X
  525. 658 :      INY:INX:JMP NAMGET
  526. 659 NADONE LDA #0:STA FILNAME,X:RTS
  527. 660 :      RTS
  528. 661 FILFNA LDY #0:LDA #"@"
  529. 662 FILLNA STA FILNAME,Y:INY
  530. 663 :      CPY #FNSIZE:BNE FILLNA
  531. 664 :      RTS
  532. 665 PRTROU STA ZP:STY ZP+1:LDY #0
  533. 666 PRTLP1 LDA (ZP),Y:CMP #0
  534. 667 :      BEQ PRTEXT:JSR 65490:INY
  535. 668 :      JMP PRTLP1
  536. 669 PRTEXT RTS
  537. 670 AOTPLE CLC:LDA PLEN:LDX PLEN+1
  538. 671 :      ADC #1:TAY:TXA:ADC #0:TAX
  539. 672 :      TYA:STA PLEN:STX PLEN+1:RTS
  540. 673 *=$C000
  541. 674 INSTAL LDX #$07
  542. 675 INSTL1 LDA ICRNCH,X:STA VECSAV,X
  543. 676 :      LDA IVECS,X:STA ICRNCH,X:DEX
  544. 677 :      BPL INSTL1:JSR MEMCHK:RTS
  545. 678 IVECS .WORD TOKNIZ
  546. 679 :     .WORD PRTOK
  547. 680 :     .WORD EXEST
  548. 681 :     .WORD EXEFUN
  549. 682 KEYTXT .ASC "RCA":.BYTE "T"+128
  550. 683 :      .ASC "RINI":.BYTE "T"+128
  551. 684 :      .ASC "RLO":.BYTE "A"+128
  552. 685 :      .ASC "RSA":.BYTE "V"+128
  553. 686 :      .ASC "FRA":.BYTE "M"+128
  554. 687 :      .BYTE 0
  555. 688 STVEC .WORD RAMDIR-1
  556. 689 :     .WORD RAMINT-1
  557. 690 :     .WORD RAMLOD-1
  558. 691 :     .WORD RAMSAV-1
  559. 692 FUNVEC .WORD FRAM
  560. 693 TOKNIZ JSR CRNCH:LDX #$00:LDY #$04
  561. 694 :      STY GARBFL
  562. 695 CRN1   LDA BUF,X
  563. 696 CRN2   STA ENDCHR:CMP #$22
  564. 697 :      BEQ SKQUOT:BIT GARBFL
  565. 698 :      BVS MOVE:CMP #"A":BCC MOVE
  566. 699 :      CMP #$5B:BCS MOVE
  567. 700 :      STY FBUFPT:LDY #NEWTOK-$80
  568. 701 :      STY COUNT:LDY #$FF
  569. 702 :      STX TXTPTR:DEX
  570. 703 CRN3   INY:INX
  571. 704 CRN4   LDA BUF,X:SEC:SBC KEYTXT,Y
  572. 705 :      BEQ CRN3:CMP #$80
  573. 706 :      BNE NEXTKW:ORA COUNT
  574. 707 CRN5   LDY FBUFPT
  575. 708 MOVE   INX:INY:STA BUF-5,Y
  576. 709 :      LDA BUF-5,Y:BEQ EXIT:SEC
  577. 710 :      SBC #":":BEQ MOVE1
  578. 711 :      CMP #DATTOK:BNE MOVE2
  579. 712 MOVE1  STA GARBFL
  580. 713 MOVE2  SEC:SBC #REMTOK:BNE CRN1
  581. 714 :      STA ENDCHR
  582. 715 SKIP1  LDA BUF,X:BEQ MOVE
  583. 716 :      CMP ENDCHR:BEQ MOVE
  584. 717 SKQUOT INY:STA BUF-5,Y:INX
  585. 718 :      BNE SKIP1
  586. 719 NEXTKW LDX TXTPTR:INC COUNT
  587. 720 NEXT1  INY:LDA KEYTXT-1,Y:BPL NEXT1
  588. 721 :      LDA KEYTXT,Y:BNE CRN4
  589. 722 :      LDA BUF,X:BPL CRN5
  590. 723 EXIT   STA BUF-3,Y:LDA #$FF
  591. 724 :      STA TXTPTR:RTS
  592. 725 PRTOK  BPL PRINT1:CMP #$FF
  593. 726 :      BEQ PRINT1:BIT GARBFL
  594. 727 :      BMI PRINT1:CMP #NEWTOK
  595. 728 :      BCC OLDPR:SEC:SBC #NEWTOK-1
  596. 729 :      TAX:STY FORPNT:LDY #$FF
  597. 730 PRTOK1 DEX:BEQ PRLOOP
  598. 731 PRTOK2 INY:LDA KEYTXT,Y:BPL PRTOK2
  599. 732 :      BMI PRTOK1
  600. 733 PRLOOP INY:LDA KEYTXT,Y:BMI PRINT2
  601. 734 :      JSR OUTDO:BNE PRLOOP
  602. 735 PRINT1 JMP PLOOP
  603. 736 PRINT2 JMP PRIT4
  604. 737 OLDPR  JMP QPLOP
  605. 738 EXEST  JSR CHRGET:CMP #NEWTOK
  606. 739 :      BCC OLDEXE:JSR EXE1
  607. 740 :      JMP NEWSTT
  608. 741 EXE1   SBC #NEWTOK:ASL:TAY
  609. 742 :      LDA STVEC+1,Y:PHA
  610. 743 :      LDA STVEC,Y:PHA:JMP CHRGET
  611. 744 OLDEXE JSR CHR(null)T:JMP (null)NE+3
  612. 745 EXEFUN LDA #$00:STA VALTYP
  613. 746 :      JSR CHRGET:CMP #$FF
  614. 747 :      BEQ OLDFUN:CMP #FUNTOK
  615. 748 :      BCC OLDFUN:SEC:SBC #FUNTOK
  616. 749 :      ASL:PHA:JSR CHRGET
  617. 750 :      JSR PARCHK:PLA:TAY
  618. 751 :      LDA FUNVEC,Y:STA JMPER+1
  619. 752 :      LDA FUNVEC+1,Y:STA JMPER+2
  620. 753 :      JSR JMPER:JMP CHKNUM
  621. 754 OLDFUN JSR CHR(null)T:JMP EVAL+7
  622. 755 ;
  623. 756 ;DATA NEEDED FOR BASIC ROM
  624. 757 ;ROUTINES, ALL OTHERS ARE
  625. 758 ;UNDER BASIC ROM
  626. 759 ;VDCDATA ALSO EQUATES WITH TEMPDA
  627. 760 ;VDCLOBYT EQUATES WITH TEMPDA+1
  628. 761 ;
  629. 762 MEMFRE =*
  630. 763 .BYTE 0,0  ;BYTES FREE IN RAMDISK
  631. 764 PLEN =*
  632. 765 .BYTE 0,0  ;FILE LENGTH- LO,HI
  633. 766 START =*
  634. 767 .BYTE 0,0  ;FILE START-- LO,HI
  635. 768 TEMPDA =*
  636. 769 VDCDATA =*
  637. 770 .BYTE 0    ;DATA TO STORE TO VDC
  638. 771 VDCLOBYT =*
  639. 772 .BYTE 0    ;VDC LOCATION (LO-BYTE)
  640. 773 VDCHIBYT =*
  641. 774 .BYTE 0    ;VDC LOCATION (HI-BYTE)
  642. 775 ;
  643. 776 ;RAM DISK ERROR MESSAGES
  644. 777 ;
  645. 778 TLONG =*
  646. 779 .ASC "FILE TOO LON[199]"
  647. 780 FULLMESS =*
  648. 781 .ASC "DIRECTORY FUL[204]"
  649. 782 FALREAD =*
  650. 783 .ASC "FILE EXIST[211]"
  651. 784 FNFMESS =*
  652. 785 .ASC "FILE NOT FOUN[196]"
  653. 786 ;
  654. 787 ;RAM ROUTINES FOR ML UNDER ROM
  655. 788 ;BANK BASIC IN, DO WORK,
  656. 789 ;THEN BANK BASIC OUT
  657. 790 ;
  658. 791 SETML1 JSR BANBIN:JSR FRMEVL
  659. 792 :      JSR FRESTR:JMP BABOUT
  660. 793 SETML2 JSR BANBIN:JSR CHKCOM
  661. 794 :      JSR FRMEVL:JSR GETADR
  662. 795 :      JMP BABOUT
  663. 796 RELINK JSR BANBIN:JSR LINKPG
  664. 797 :      JMP BABOUT
  665. 798 PRTINT JSR BANBIN:JSR OUTINT
  666. 799 :      JMP BABOUT
  667. 800 DOEROR JSR BANBIN:JMP ERROR+16
  668. 801 ;
  669. 802 ;BANK BASIC ROM OUT
  670. 803 ;
  671. 804 BABOUT PHA:LDA 1:AND #254
  672. 805 :      JMP BIOSET
  673. 806 ;
  674. 807 ;BANK BASIC ROM IN
  675. 808 ;
  676. 809 BANBIN PHA:LDA 1:ORA #1
  677. 810 BIOSET STA 1:PLA:RTS
  678. 811 ;
  679. 812 ;RAM VECTORS FOR ML
  680. 813 ;UNDER BASIC ROM, SWITCH
  681. 814 ;OUT BASIC, DO WORK,
  682. 815 ;SWITCH BASIC BACK IN
  683. 816 ;
  684. 817 RAMLOD JSR BABOUT:JSR RLOA
  685. 818 :      JMP BANBIN;RAMDISK LOAD
  686. 819 RAMSAV JSR BABOUT:JSR RSAV
  687. 820 :      JMP BANBIN;RAMDISK SAVE
  688. 821 RAMINT JSR BABOUT:JSR RDCLEAR
  689. 822 :      JMP BANBIN;RAMDISK INIT
  690. 823 RAMDIR JSR BABOUT:JSR DIRGET
  691. 824 :      JMP BANBIN;RAMDISK CATALOG
  692. 825 MEMCHK JSR BABOUT:JSR CHKMEM
  693. 826 :      JMP BANBIN;CHK AMT MEMORY
  694. 827 ;
  695. 828 ;FREE RAMDISK MEMORY FUNCTION
  696. 829 ;
  697. 830 FRAM  LDA MEMFRE:STA FACHO+1
  698. 831 :     LDA MEMFRE+1:STA FACHO
  699. 832 :     LDX #$90:SEC:JSR FLOATC:RTS
  700.